<?php
/**
 * 监听进程消息事件
*/

namespace event\websocket;

class onMessage
{
    /**
	 * 启动实例
	*/
    public $server;
    
    /**
     *  服务配置
    */ 
    public $config;
    
    /**
     * 接收服务实例
    */
    public function __construct($server, $config) {
        $this->server = $server;
        $this->config = $config;
    }
    
    /**
     * 统一回调入口
    */
    public function run(\Workerman\Connection\TcpConnection $response, $request) {
        // 是否启动心跳
        if($this->config['heartbeat_is_set']){
            // 记录上次收到消息的时间
            $response->lastMessageTime = time();
        }
        
        // 初始化进程连接ID
        \houze\context\Container::run($this->server->id.$response->id);
        
        // 上下文管理
        \houze\context\Container::set('websocket_server', $this->server);
        \houze\context\Container::set('websocket_response', $response);
        \houze\context\Container::set('websocket_data', $request);
        
        $ip = $response->getRemoteIp();
        
        // 触发限流器
        // if (\houze\Limit::run()->ipVif($server, $response->id, $ip, 'websocket') == false) {
        //     return false;
        // }

        # 开始转发路由
        $obj = new \houze\route\WebSocket();
        $obj->start();
        
        // 调用二次转发，不做重载
        $on = new \event\server\onMessage($this->server, $this->config);
        $on->run($response, $request);
        
        // 销毁上下文管理
        \houze\context\Container::delete();
    }

}

